package cc.rengu.igas.channel.upac.facade;

import cc.rengu.igas.channel.upac.facade.request.*;
import cc.rengu.igas.channel.upac.facade.response.*;
import cc.rengu.igas.channel.upac.facade.result.Result;

/**
 * 银联全渠道token支付业务API组件
 * Created by 王成 on 2019/2/26.
 */
public interface UpacTokenPayService {

    /**
     * 银联全渠道发送短信验证码服务
     *
     * @param upacSendSmsCodeRequest 发送短信验证码请求
     * @return 发送短信验证码应答
     * @
     */
    Result<UpacSendSmsCodeResponse> upacSendSmsCode(UpacSendSmsCodeRequest upacSendSmsCodeRequest);

    /**
     * 无跳转支付开通查询服务
     *
     * @param tokenPayOpenQueryRequest 无跳转支付开通查询请求
     * @return 无跳转支付开通查询应答
     * @
     */
    Result<TokenPayOpenQueryResponse> tokenPayOpenQuery(TokenPayOpenQueryRequest tokenPayOpenQueryRequest);

    /**
     * token支付交易状态查询服务
     *
     * @param tokenTransStateQueryRequest 交易状态查询请求
     * @return 交易状态查询应答
     * @
     */
    Result<TokenTransStateQueryRespone> tokenTransStateQuery(TokenTransStateQueryRequest tokenTransStateQueryRequest);


    /**
     * token消费
     *
     * @param tokenConsumeRequest 消费请求
     * @return 消费应答
     * @
     */
    Result<TokenConsumeResponse> tokenConsume(TokenConsumeRequest tokenConsumeRequest);

    /**
     * 银联全渠道token消费撤销
     *
     * @param tokenConsumeCancelRequest 消费撤销请求
     * @return 消费撤销应答
     * @
     */
    Result<TokenConsumeCancelResponse> tokenConsumeCancel(TokenConsumeCancelRequest tokenConsumeCancelRequest);

    /**
     * 银联全渠道token消费退货服务
     *
     * @param tokenConsumeRefundRequest 退货请求
     * @return 退货应答
     * @
     */
    Result<TokenConsumeRefundResponse> tokenConsumeRefund(TokenConsumeRefundRequest tokenConsumeRefundRequest);

    /**
     * 银联全渠道预授权服务
     *
     * @param upacAuthRequest 预授权请求
     * @return 预授权应答
     * @
     */
    Result<UpacAuthResponse> upacAuth(UpacAuthRequest upacAuthRequest);

    /**
     * 银联全渠道预授权撤销服务
     *
     * @param upacAuthCancelRequest 预授权撤销请求
     * @return 预授权撤销应答
     * @
     */
    Result<UpacAuthCancelRespone> upacAuthCancel(UpacAuthCancelRequest upacAuthCancelRequest);

    /**
     * 银联全渠道预授权完成服务
     *
     * @param upacAuthFinishRequest 预授权完成请求
     * @return 预授权完成应答
     * @
     */
    Result<UpacAuthFinishResponse> upacAuthFinish(UpacAuthFinishRequest upacAuthFinishRequest);

    /**
     * 银联全渠道预授权完成撤销服务
     *
     * @param upacAuthFinishCancelRequest 预授权完成撤销请求
     * @return 预授权完成撤销应答
     * @
     */
    Result<UpacAuthFinishCancelResponse> upacAuthFinishCancel(UpacAuthFinishCancelRequest upacAuthFinishCancelRequest);

    /**
     * 银联全渠道解除标记服务
     *
     * @param deleteTokenRequest 解除标记请求
     * @return 解除标记应答
     * @
     */
    Result<DeleteTokenResponse> deleteToken(DeleteTokenRequest deleteTokenRequest);

    /**
     * 银联全渠道更新标记服务
     *
     * @param upacUpdateTokenRequest 更新标记请求
     * @return 更新标记应答
     * @
     */
    Result<UpacUpdateTokenResponse> upacUpdateToken(UpacUpdateTokenRequest upacUpdateTokenRequest);

    /**
     * 银联全渠道订单号申请 Token
     *
     * @param tokenPayOpenByOrderIdRequest 订单号申请token请求
     * @return 订单号申请token应答
     * @
     */
    Result<TokenPayOpenByOrderIdResponse> tokenApply(TokenPayOpenByOrderIdRequest tokenPayOpenByOrderIdRequest);

}
